package aventuraespacial;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.Toolkit;
import java.net.URL;



/**
 * @author   woodoo
 */
public abstract class ObjetoEspacial{
   
	/************************* ATRIBUTOS DE CLASE  ****************************/
    protected double x;	
	
	protected double y;
	
	protected double angulo;
	
	protected double velocidad;
    
    protected Shape forma;
    
    private boolean vivo;

    private Image imagen;
    
    static boolean bordesActivados;
    
    
    /************************* SETTERS Y GETTERS  ****************************/
    public static boolean isBordesActivados() {
		return bordesActivados;
	}

	public static void setBordesActivados(boolean bordesActivados) {
		ObjetoEspacial.bordesActivados = bordesActivados;
	}

	public Image getImagen() {
		return imagen;
	}

	public void setImagen(Image imagen) {
		this.imagen= imagen;
	}

	public double getAngulo() {
        return angulo;
    }
    
    /**
	 * @return
	 * @uml.property  name="x"
	 */
    public double getX() {
        return x;
    }
    
    /**
	 * @return
	 * @uml.property  name="y"
	 */
    public double getY() {
        return y;
    }
    
    /**
	 * @return
	 * @uml.property  name="forma"
	 */
    public Shape getForma() {
        return forma;
    }
    
    /**
	 * @return
	 * @uml.property  name="velocidad"
	 */
    public double getVelocidad() {
		return velocidad;
	}
    
	/**
	 * @return
	 * @uml.property  name="vivo"
	 */
	public boolean isVivo() {
		return vivo;
	}

	
	/**
	 * SETTERS
	 * @uml.property  name="angulo"
	 */
	
		
	public void setAngulo(double angulo) {
        this.angulo = angulo;
    }
	
    /**
	 * @param x
	 * @uml.property  name="x"
	 */
    public void setX(double x) {
        this.x = x;
    }
    
    /**
	 * @param y
	 * @uml.property  name="y"
	 */
    public void setY(double y) {
        this.y = y;
    }
    
    /**
	 * @param forma
	 * @uml.property  name="forma"
	 */
    public void setForma(Shape forma) {
        this.forma = forma;
    }
    
    /**
	 * @param velocidad
	 * @uml.property  name="velocidad"
	 */
    public void setVelocidad(double velocidad) {
		this.velocidad = velocidad;
	}
    
	/**
	 * @param vivo
	 * @uml.property  name="vivo"
	 */
	public void setVivo(boolean vivo) {
		this.vivo = vivo;
	}
	
	/************************* METODOS DE CLASE  ****************************/
	
	
	
	public void actualizarX(){
		x=x+(calcDirX()*velocidad);
	}
	
	public void actualizarY(){
		y=y+(calcDirY()*velocidad);
	}
	
	private URL  getUrl(String nombreArchivo){
		
		URL url=null;
		try{
				url= this.getClass().getResource(nombreArchivo);
		}catch (Exception e){}
		return url;
	}
	
	public Image cargarImagen(String nombreArchivo){
		
		return Toolkit.getDefaultToolkit().getImage(getUrl(nombreArchivo));
	}
	
    /************************* METODOS ABSTRACTOS  ****************************/
	

    public abstract Rectangle getBordes();
    public abstract boolean fueraDePantalla();
    public abstract void dibujar(Graphics2D g);
    public abstract double calcDirX();	
	public abstract double calcDirY();
      
}